From: Jasper St. Pierre Date: Wed, 22 May 2013 17:20:20 +0000 (-0400) Subject: messageTray: Fix a stuck grab related to bubble notifications X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4120 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=991ed2da72755e4b3dc670c64ea3800a9e2b13d3;p=gnome-shell.git messageTray: Fix a stuck grab related to bubble notifications If the user middle clicks on a summary item in the tray, we'll try to grab null instead of an actor, which is wrong. https://bugzilla.gnome.org/show_bug.cgi?id=700854 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 68f4e5c5f..b17053b1e 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -2633,28 +2633,35 @@ const MessageTray = new Lang.Class({ }, _showSummaryBoxPointer: function() { - this._summaryBoxPointerItem = this._clickedSummaryItem; - this._summaryBoxPointerContentUpdatedId = this._summaryBoxPointerItem.connect('content-updated', - Lang.bind(this, this._onSummaryBoxPointerContentUpdated)); - this._sourceDoneDisplayingId = this._summaryBoxPointerItem.source.connect('done-displaying-content', - Lang.bind(this, this._onSourceDoneDisplayingContent)); - - let hasRightClickMenu = this._summaryBoxPointerItem.rightClickMenu != null; - if (this._clickedSummaryItemMouseButton == 1 || !hasRightClickMenu) { + let child; + let summaryItem = this._clickedSummaryItem; + if (this._clickedSummaryItemMouseButton == 1) { // Acknowledge all our notifications - this._summaryBoxPointerItem.source.notifications.forEach(function(n) { n.acknowledged = true; }); + summaryItem.source.notifications.forEach(function(n) { n.acknowledged = true; }); - this._summaryBoxPointer.bin.child = this._summaryBoxPointerItem.notificationStackWidget; + child = summaryItem.notificationStackWidget; - let closeButton = this._summaryBoxPointerItem.closeButton; + let closeButton = summaryItem.closeButton; closeButton.show(); this._summaryBoxPointerCloseClickedId = closeButton.connect('clicked', Lang.bind(this, this._hideSummaryBoxPointer)); - this._summaryBoxPointerItem.prepareNotificationStackForShowing(); + summaryItem.prepareNotificationStackForShowing(); } else if (this._clickedSummaryItemMouseButton == 3) { - this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu; + child = summaryItem.rightClickMenu; this._summaryBoxPointerCloseClickedId = 0; } + // If the user clicked the middle mouse button, or the item + // doesn't have a right-click menu, do nothing. + if (!child) + return; + + this._summaryBoxPointerItem = summaryItem; + this._summaryBoxPointerContentUpdatedId = this._summaryBoxPointerItem.connect('content-updated', + Lang.bind(this, this._onSummaryBoxPointerContentUpdated)); + this._sourceDoneDisplayingId = this._summaryBoxPointerItem.source.connect('done-displaying-content', + Lang.bind(this, this._onSourceDoneDisplayingContent)); + + this._summaryBoxPointer.bin.child = child; this._grabHelper.grab({ actor: this._summaryBoxPointer.bin.child, modal: true, onUngrab: Lang.bind(this, this._onSummaryBoxPointerUngrabbed) });